// get_arg.h
//

#if !defined(GETARG_H)
#define GETARG_H

#include <string>
//#include <iosfwd>
#include <sstream>
#include <iostream>
#include <fstream>

enum eALIGNMODE {eALIGN_PAIRWISE, eALIGN_IDENTIFIERS, eALIGN_ALLVSALL, eALIGN_SPECIFIED};
enum eMATRIX {eMATRIX_BLOSUM62, eMATRIX_BLOSUM80, eMATRIX_DNA};
#include <program_options_helper.h>

class t_program_args : public program_options_helper::t_std_program_args_with_errors
{
public:
	t_program_args():
		blast_log_to_file(false){}

	std::string 		regex;
	std::string 		file_pairs;
	std::string 		file_identifiers;
	bool 				results_header;
	bool				self_self;
	bool				reciprocals;
	eALIGNMODE			align_mode;
	std::string			matrix;
	bool				seg;
	float				cutoff;
	unsigned			lencutoff;
	double				db_size;
	std::string			comment_letters;

	std::ostream&		BLAST_LOG()		{   return f_blast_err_log;}

	friend
	bool process_command_line_options(int argc, char* argv[], t_program_args& args);
	void open_log_files();
private:
	bool				blast_log_to_file;
	std::string			blast_err_log_name;
	std::ofstream		f_blast_err_log;
};

bool process_command_line_options(int argc, char* argv[], t_program_args& args);
#endif //GETARG_H
